package cn.doitedu;

public class 方法升华练习 {
    public static void main(String[] args) {

        /*
          定义一个方法，接收一个整数数组，
          首先，把接收的数组按如下格式打印出来： 您输入的数组是: [1,3,5,8,2,10...]
          然后，判断这个输入的数组的元素个数是否是3的倍数
             如果不是，则打印：“输入数组长度必须是3的倍数”，并返回 null(空值)
             如果是，则把这个输入数组按3个元素一组，求最大值； 最后返回所求得的各组的最大值
         */
        // 定义一个测试用的数组
        int[] tmp = new int[]{1, 3, 5, 8, 6, 4, 18, 20, 13, 66};

        // 调用方法，对传入的数组，按3个一组求最大值
        int[] maxResults = arrProcess(tmp);

        // 调用方法，打印最大值结果数组
        printArr(maxResults);


    }


    // 输入一个数组，按3个元素一组取最大值，并返回各组的最大值
    public static int[] arrProcess(int[] arr) {

        // 打印输入的数组
        printArr(arr);

        if (arr.length >= 3 && arr.length % 3 == 0) {

            // 如果是,则把这个输入数组按3个元素一组,求最大值； 最后返回所求得的各组的最大值
            int[] maxValues = new int[arr.length / 3];

            for (int i = 0; i < arr.length; i = i + 3) {

                // 求 i, i+1 ,i+2 三个脚标上的值的最大值
                int max = getMax(arr[i], arr[i + 1], arr[i + 2]);

                // 将本轮求到的最大值，放入结果数组的正确位置
                maxValues[i / 3] = max;

            }
            return maxValues;


        } else {
            // 如果不是，则打印：“输入数组长度必须是3的倍数”，并返回 null(空值)
            System.out.println("输入数组的长度必须是3的倍数");
            return null;
        }


    }


    // 求3个整数的最大值
    public static int getMax(int a, int b, int c) {

        int max = a > b ? a : b;

        max = max > c ? max : c;

        return max;
    }


    // 打印数组的方法
    public static void printArr(int[] arr) {

        if (arr == null) {
            System.out.println(arr);
        } else {
            //  [1,3,5,8,2,10]
            System.out.print("[");
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i]);

                if (i < arr.length - 1) {
                    System.out.print(",");
                }

            }
            System.out.println("]");
        }


    }
}
